<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script>
    /**
     * 闭包(closure) 指有权访问另一个函数作用域中变量的函数
     * 简单理解就是: 一个作用域可以访问另外一个函数内部的局部变量
     * #
     * 闭包是函数
     * #
     * 闭包的主要作用: 延伸了变量的作用范围
     */


    // 闭包: 我们 innerFunc 这个函数作用域, 访问了另外一个函数 fn 里面的局部变量 number
    // 我们 fn 外面的作用域可以访问 fn 内部的局部变量
    function fn() {
        let number = 10;

        // function innerFunc() {
        //     console.log(`innerFunc: ${number}`)
        // }
        //
        // return innerFunc;

        // 简略写法, 直接将一个函数作为返回值返回 --> 高阶函数
        return () => {
            console.log(`=> arrowFunc: ${number}`)
        }
    }

    let f = fn();
    f();
    // 类似于
    // var f = function innerFunc() {
    //             console.log(`innerFunc: ${number}`)
    //         }

</script>
</body>
</html>
